package com.lzh.others.basejava.Thread_21;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @Description: 线程池，主线程等待子线程 测试
 * @Author: LiuZiHao
 * @Date: 2022/6/29 10:39
 */
public class Demo {
    public static void main(String[] args) throws InterruptedException {

        // 初始化countDown
        CountDownLatch threadSignal = new CountDownLatch(5);
        // 使用线程池
        ExecutorService service = Executors.newScheduledThreadPool(5);
        //创建线程对象，处于new的状态(State),在堆种，一个对象被创建
        MyThread myThread = new MyThread(threadSignal);
        System.out.println("myThread.state = " + myThread.getState());
        //调用start方法：线程处于runnable状态，同时在栈中新增一个栈，也就是程序中多了一个线程，随时会被cpu执行
        //执行完后，栈被删除，
        myThread.start();
        System.out.println("myThread.state = " + myThread.getState());
//        System.out.println("主线程阻塞");
//        threadSignal.await();
//        System.out.println("主线程结束");
//        for (int i = 0; i < 5; i++) {
//            service.execute(new Runnable() {
//                @Override
//                public void run() {
//                    threadSignal.countDown();
//                }
//            });
//        }

//        service.shutdown();
//        // service.isTerminated()判断子线程是否全部完成；完成 ：true；没完成 ：falese
//        System.out.println("调用awaitTermination之前：" + service.isTerminated());
//        // 个人理解：如果service进行了shutdown操作，就查看子线程是否全部完成（也就是调用此方法），其中的参数相当于超时时间
//        service.awaitTermination(1, TimeUnit.HOURS);
//        System.out.println("调用awaitTermination之后：" + service.isTerminated());
//        if (service.isTerminated()) {
//            System.out.println("子线程执行完毕");
//            System.out.println("主线程开始");
//        }

        System.out.println("myThread.state = " + myThread.getState());

    }
}

